package com.example.j280_webproject.day039.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * 此类实现班级信息的增添和查找
 */
public class ClassJDBC {
    /**
     * 在班级表里面增添班级信息
     *
     * @param connection       数据库连接池
     * @param className        班级名称
     * @throws SQLException    SQL异常
     */
    public void insertClass(Connection connection , String className) throws SQLException {
        String sql = "insert into class(className)values (?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,className);
        preparedStatement.execute();
        preparedStatement.close();
    }

    /**
     * 通过班级名称查询班级是否存在，如果班级存在则返回班级id，否则返回为-1
     *
     * @param connection       数据库连接池
     * @param className        班级名称
     * @return                 返回一个int值，如果班级存在返回班级id，如果不存在返回-1
     * @throws SQLException    SQL异常
     */
    public int selectByClassName(Connection connection, String className) throws SQLException {
        int id = -1;
        String sql = "select id from class where className=?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,className);
        ResultSet resultSet = preparedStatement.executeQuery();
        boolean action = resultSet.next();
        if (action){
            id = resultSet.getInt("id");
        }
        resultSet.close();
        preparedStatement.close();
        return id;
    }

    /**
     * 如果没有传递班级名称查询所有班级信息，将查询到的班级信息通过pojo包的Class类封装循环写入每条班级信息并写入到list集合当中，最后返回list集合
     *
     * @param connection       数据库连接池
     * @return                 返回list集合
     * @throws SQLException    SQL异常
     */
    public List<com.example.j280_webproject.day039.pojo.Class> selectClassList(Connection connection) throws SQLException {
        String sql ="select id,className from class";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        ResultSet resultSet = preparedStatement.executeQuery();
        com.example.j280_webproject.day039.pojo.Class myClass = null;                     //创建myClass对象初始化为null
        List<com.example.j280_webproject.day039.pojo.Class> list = new ArrayList<>();
        while (resultSet.next()){                                                         //当有下一条数据resultSet.next()为true
            myClass = new com.example.j280_webproject.day039.pojo.Class();                //创建一个新的对象地址来指向对应需要封装的值
            myClass.id = resultSet.getInt("id");                              //结果集调用getInt方法过去字段id的值传递给myClass.id
            myClass.className = resultSet.getString("className");             //结果集调用getString方法过去字段className的值传递给myClass.className
            list.add(myClass);                                                            //将myClass对象按顺序添加到list集合中
        }
        return list;                                                                      //返回list集合
    }

    /**
     * 传递班级名称，通过className模糊查询传递班级名称的信息，将查询到的班级信息通过pojo包的Class类封装循环写入每条班级信息到一个list集合当中，并返回list集合
     *
     * @param connection       数据库连接池
     * @param className        班级名称
     * @return                 返回list集合
     * @throws SQLException    SQL异常
     */
    public List<com.example.j280_webproject.day039.pojo.Class> selectClassListByClassName(Connection connection,String className) throws SQLException {
        String sql ="select id,className from class where className like ?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,"%"+className+"%");
        ResultSet resultSet = preparedStatement.executeQuery();
        com.example.j280_webproject.day039.pojo.Class myClass = null;                     //创建myClass对象初始化为null
        List<com.example.j280_webproject.day039.pojo.Class> list = new ArrayList<>();
        while (resultSet.next()){                                                         //当有下一条数据resultSet.next()为true
            myClass = new com.example.j280_webproject.day039.pojo.Class();                //创建一个新的对象地址来指向对应需要封装的值
            myClass.id = resultSet.getInt("id");                              //结果集调用getInt方法过去字段id的值传递给myClass.id
            myClass.className = resultSet.getString("className");             //结果集调用getString方法过去字段className的值传递给myClass.className
            list.add(myClass);                                                            //将myClass对象按顺序添加到list集合中
        }
        return list;                                                                      //返回list集合
    }
}
